package com.tledu.httpclient;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class HttpClient2 {
    public static void main(String[] args) throws IOException {
        // 需要我们需要请求的地址是哪一个
//        String url = "http://1.117.81.216/test/get?name=孔祥瑞&age=18";
        String url = "http://1.117.81.216/test/get";

        // HttpClient,提供了传递参数的工具
        List<NameValuePair> pairList = new ArrayList<>();
        pairList.add(new BasicNameValuePair("name","cyrus"));
        pairList.add(new BasicNameValuePair("age","18"));
        url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairList), "utf8");
        System.out.println(url);
        // 1. 创建HttpClient
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        // 2. 创建请求,创建一个get请求
        HttpGet httpGet = new HttpGet(url);
        // 3. 通过httpclient 发送请求拿到对应的数据
        CloseableHttpResponse response = httpClient.execute(httpGet);
        // 拿到我们请求的响应的状态吗
        // 一般情况我们会根据这个状态码判断，请求是否成功
        int statusCode = response.getStatusLine().getStatusCode();
        // http请求的状态码有哪些
        // http状态码
        //  200 开头代表的请求成功
        //  3XX 代表重定向
        //      302 代表这个地址需要进行重定向操作,而响应头的Location对应的内容就是重定向的地址
        //  4XX 开头的,请求有问题
        //      400 请求参数有问题
        //      401 没有登录就进行操作了
        //      403 登录了但是没有权限操作这个资源
        //      404 地址存在
        //      405 请求方式不对，定义的是get但是我们用post发送了
        //      415 请求格式不对
        //  5XX 开头的，代表服务端有错误
        //      500 服务器内部错误
        //      502 服务过载
        //      504 请求超时
        if (statusCode != 200){
            // 请求失败了
            httpGet.abort();
            System.out.println("请求失败");
        }else {
            // 请求成功
            // 获取响应体内容
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                // 拿到对应的数据
                System.out.println(EntityUtils.toString(entity, "utf8"));
                // 释放资源
                EntityUtils.consume(entity);
                // 关闭响应
                response.close();
            }
        }
    }
}
